/**
 * 主题管理系统
 * 支持多种松鼠记账特色主题的切换和管理
 */

// 主题配置定义
const themes = {
  // 可爱浅绿主题（当前主题）
  cute: {
    id: 'cute',
    name: '可爱浅绿',
    description: '清新可爱的浅绿色主题，温馨自然',
    icon: '🌱',
    colors: {
      // 主色调 - 降低亮度
      primary: '#7ED321',
      primaryLight: '#8EE53A',
      primaryDark: '#6BC016',

      // 辅助色 - 降低亮度
      accent: '#FF8FA3',
      accentLight: '#FFA8B8',
      accentDark: '#FF6B8A',

      // 背景色 - 更加柔和
      bgPrimary: '#F8FFFE',
      bgSecondary: '#FFFFFF',
      bgTertiary: '#F0F8F5',

      // 文字颜色 - 增加对比度
      textPrimary: '#2C3E50',
      textSecondary: '#5A6C7D',
      textTertiary: '#95A5A6',
      textInverse: '#FFFFFF',

      // 功能色 - 调整亮度
      success: '#27AE60',
      warning: '#F39C12',
      error: '#E74C3C',
      info: '#3498DB',

      // 边框和分割线 - 更加柔和
      border: '#D5E8D4',
      divider: '#E8F5E8',

      // 阴影 - 降低强度
      shadowLight: 'rgba(126, 211, 33, 0.08)',
      shadowMedium: 'rgba(126, 211, 33, 0.15)',
      shadowHeavy: 'rgba(126, 211, 33, 0.25)'
    }
  },

  // 经典松鼠主题
  classic: {
    id: 'classic',
    name: '经典松鼠',
    description: '温暖的棕色系主题，经典松鼠色彩',
    icon: '🐿️',
    colors: {
      // 主色调
      primary: '#8B4513',
      primaryLight: '#A0522D',
      primaryDark: '#654321',

      // 辅助色
      accent: '#FF8C00',
      accentLight: '#FFA500',
      accentDark: '#FF7F00',

      // 背景色
      bgPrimary: '#FFF8DC',
      bgSecondary: '#F5F5DC',
      bgTertiary: '#F0E68C',

      // 文字颜色
      textPrimary: '#2F2F2F',
      textSecondary: '#696969',
      textTertiary: '#A9A9A9',
      textInverse: '#FFFFFF',

      // 功能色
      success: '#32CD32',
      warning: '#FFD700',
      error: '#DC143C',
      info: '#4682B4',

      // 边框和分割线
      border: '#DEB887',
      divider: '#F0E68C',

      // 阴影
      shadowLight: 'rgba(139, 69, 19, 0.1)',
      shadowMedium: 'rgba(139, 69, 19, 0.2)',
      shadowHeavy: 'rgba(139, 69, 19, 0.3)'
    }
  },

  // 森林绿主题
  forest: {
    id: 'forest',
    name: '森林绿',
    description: '深邃的森林绿色主题，自然清新',
    icon: '🌲',
    colors: {
      // 主色调
      primary: '#228B22',
      primaryLight: '#32CD32',
      primaryDark: '#006400',

      // 辅助色
      accent: '#3CB371',
      accentLight: '#90EE90',
      accentDark: '#2E8B57',

      // 背景色
      bgPrimary: '#F0FFF0',
      bgSecondary: '#F5FFFA',
      bgTertiary: '#E0FFE0',

      // 文字颜色
      textPrimary: '#2F4F2F',
      textSecondary: '#556B2F',
      textTertiary: '#8FBC8F',
      textInverse: '#FFFFFF',

      // 功能色
      success: '#228B22',
      warning: '#DAA520',
      error: '#B22222',
      info: '#4682B4',

      // 边框和分割线
      border: '#C1FFC1',
      divider: '#E0FFE0',

      // 阴影
      shadowLight: 'rgba(34, 139, 34, 0.1)',
      shadowMedium: 'rgba(34, 139, 34, 0.2)',
      shadowHeavy: 'rgba(34, 139, 34, 0.3)'
    }
  },

  // 金秋橙主题
  autumn: {
    id: 'autumn',
    name: '金秋橙',
    description: '温暖的金秋橙色主题，丰收的感觉',
    icon: '🍂',
    colors: {
      // 主色调 - 降低亮度
      primary: '#E67E22',
      primaryLight: '#F39C12',
      primaryDark: '#D35400',

      // 辅助色 - 降低亮度
      accent: '#F1C40F',
      accentLight: '#F7DC6F',
      accentDark: '#D4AC0D',

      // 背景色 - 更加柔和
      bgPrimary: '#FEF9E7',
      bgSecondary: '#FFFFFF',
      bgTertiary: '#FCF3CF',

      // 文字颜色 - 增加对比度
      textPrimary: '#2C3E50',
      textSecondary: '#5D6D7E',
      textTertiary: '#85929E',
      textInverse: '#FFFFFF',

      // 功能色
      success: '#27AE60',
      warning: '#E67E22',
      error: '#E74C3C',
      info: '#3498DB',

      // 边框和分割线 - 更加柔和
      border: '#F4D03F',
      divider: '#FCF3CF',

      // 阴影 - 降低强度
      shadowLight: 'rgba(230, 126, 34, 0.08)',
      shadowMedium: 'rgba(230, 126, 34, 0.15)',
      shadowHeavy: 'rgba(230, 126, 34, 0.25)'
    }
  },

  // 冬雪蓝主题
  winter: {
    id: 'winter',
    name: '冬雪蓝',
    description: '清冷的冰雪蓝色主题，宁静优雅',
    icon: '❄️',
    colors: {
      // 主色调
      primary: '#4682B4',
      primaryLight: '#87CEEB',
      primaryDark: '#2F4F4F',

      // 辅助色
      accent: '#B0C4DE',
      accentLight: '#E6E6FA',
      accentDark: '#6495ED',

      // 背景色
      bgPrimary: '#F0F8FF',
      bgSecondary: '#FFFFFF',
      bgTertiary: '#F5F5F5',

      // 文字颜色
      textPrimary: '#2F4F4F',
      textSecondary: '#708090',
      textTertiary: '#B0C4DE',
      textInverse: '#FFFFFF',

      // 功能色
      success: '#32CD32',
      warning: '#FFD700',
      error: '#DC143C',
      info: '#4682B4',

      // 边框和分割线
      border: '#B0E0E6',
      divider: '#E0F6FF',

      // 阴影
      shadowLight: 'rgba(70, 130, 180, 0.1)',
      shadowMedium: 'rgba(70, 130, 180, 0.2)',
      shadowHeavy: 'rgba(70, 130, 180, 0.3)'
    }
  },

  // 樱花粉主题
  sakura: {
    id: 'sakura',
    name: '樱花粉',
    description: '浪漫的樱花粉色主题，温柔甜美',
    icon: '🌸',
    colors: {
      // 主色调 - 降低亮度
      primary: '#E91E63',
      primaryLight: '#F06292',
      primaryDark: '#C2185B',

      // 辅助色 - 降低亮度
      accent: '#BA68C8',
      accentLight: '#CE93D8',
      accentDark: '#AB47BC',

      // 背景色 - 更加柔和
      bgPrimary: '#FCE4EC',
      bgSecondary: '#FFFFFF',
      bgTertiary: '#F8BBD9',

      // 文字颜色 - 增加对比度
      textPrimary: '#2C3E50',
      textSecondary: '#5D6D7E',
      textTertiary: '#85929E',
      textInverse: '#FFFFFF',

      // 功能色
      success: '#27AE60',
      warning: '#F39C12',
      error: '#E74C3C',
      info: '#3498DB',

      // 边框和分割线 - 更加柔和
      border: '#F8BBD9',
      divider: '#FCE4EC',

      // 阴影 - 降低强度
      shadowLight: 'rgba(233, 30, 99, 0.08)',
      shadowMedium: 'rgba(233, 30, 99, 0.15)',
      shadowHeavy: 'rgba(233, 30, 99, 0.25)'
    }
  },

  // 薄荷绿主题
  mint: {
    id: 'mint',
    name: '薄荷绿',
    description: '清新的薄荷绿色主题，清凉舒适',
    icon: '🌿',
    colors: {
      // 主色调 - 降低亮度
      primary: '#00BCD4',
      primaryLight: '#4DD0E1',
      primaryDark: '#0097A7',

      // 辅助色 - 降低亮度
      accent: '#4DB6AC',
      accentLight: '#80CBC4',
      accentDark: '#26A69A',

      // 背景色 - 更加柔和
      bgPrimary: '#E0F2F1',
      bgSecondary: '#FFFFFF',
      bgTertiary: '#B2DFDB',

      // 文字颜色 - 增加对比度
      textPrimary: '#2C3E50',
      textSecondary: '#5D6D7E',
      textTertiary: '#85929E',
      textInverse: '#FFFFFF',

      // 功能色
      success: '#00BCD4',
      warning: '#F39C12',
      error: '#E74C3C',
      info: '#3498DB',

      // 边框和分割线 - 更加柔和
      border: '#B2DFDB',
      divider: '#E0F2F1',

      // 阴影 - 降低强度
      shadowLight: 'rgba(0, 188, 212, 0.08)',
      shadowMedium: 'rgba(0, 188, 212, 0.15)',
      shadowHeavy: 'rgba(0, 188, 212, 0.25)'
    }
  }
};

// 主题管理类
class ThemeManager {
  constructor() {
    this.currentTheme = 'cute'; // 默认主题
    this.listeners = new Set(); // 主题变更监听器
    this.loadTheme();
  }

  /**
   * 获取所有可用主题
   */
  getThemes() {
    return Object.values(themes);
  }

  /**
   * 获取主题配置
   */
  getTheme(themeId) {
    return themes[themeId] || themes.cute;
  }

  /**
   * 获取当前主题
   */
  getCurrentTheme() {
    return this.getTheme(this.currentTheme);
  }

  /**
   * 设置主题
   */
  setTheme(themeId) {
    if (!themes[themeId]) {
      console.warn(`Theme ${themeId} not found, using default theme`);
      themeId = 'cute';
    }

    this.currentTheme = themeId;
    this.saveTheme();
    this.applyTheme();
    this.notifyListeners();
  }

  /**
   * 应用主题到页面
   */
  applyTheme() {
    const theme = this.getCurrentTheme();

    // 在uni-app中，需要同时处理document和页面
    const root = document.documentElement || document.body;

    if (root && root.style) {
      // 将主题颜色应用到CSS变量
      Object.entries(theme.colors).forEach(([key, value]) => {
        const cssVarName = `--theme-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
        root.style.setProperty(cssVarName, value);
      });

      // 设置主题ID
      root.setAttribute('data-theme', theme.id);
    }

    // 在uni-app中，还需要更新页面级别的样式
    // 通过事件通知所有页面更新主题
    uni.$emit('theme-changed', theme);

    // 强制重新渲染页面
    this.forcePageUpdate();
  }

  /**
   * 强制页面更新
   */
  forcePageUpdate() {
    // 通过修改页面根元素的class来触发重新渲染
    const root = document.documentElement || document.body;
    if (root) {
      root.classList.add('theme-updating');
      setTimeout(() => {
        root.classList.remove('theme-updating');
      }, 100);
    }
  }

  /**
   * 保存主题到本地存储
   */
  saveTheme() {
    try {
      uni.setStorageSync('selected_theme', this.currentTheme);
    } catch (e) {
      console.error('Failed to save theme:', e);
    }
  }

  /**
   * 从本地存储加载主题
   */
  loadTheme() {
    try {
      const savedTheme = uni.getStorageSync('selected_theme');
      if (savedTheme && themes[savedTheme]) {
        this.currentTheme = savedTheme;
      }
    } catch (e) {
      console.error('Failed to load theme:', e);
    }

    // 延迟应用主题，确保页面已加载
    setTimeout(() => {
      this.applyTheme();
    }, 100);
  }

  /**
   * 添加主题变更监听器
   */
  addListener(callback) {
    if (typeof callback !== 'function') {
      console.error('addListener: callback must be a function');
      return () => { };
    }
    this.listeners.add(callback);
    return () => this.listeners.delete(callback);
  }

  /**
   * 通知监听器主题已变更
   */
  notifyListeners() {
    this.listeners.forEach(callback => {
      try {
        if (typeof callback === 'function') {
          callback(this.getCurrentTheme());
        } else {
          console.warn('Invalid listener callback:', callback);
          this.listeners.delete(callback);
        }
      } catch (e) {
        console.error('Theme listener error:', e);
        this.listeners.delete(callback);
      }
    });
  }

  /**
   * 获取主题的CSS变量
   */
  getThemeVars(themeId) {
    const theme = this.getTheme(themeId);
    const vars = {};

    Object.entries(theme.colors).forEach(([key, value]) => {
      const cssVarName = `--theme-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
      vars[cssVarName] = value;
    });

    return vars;
  }

  /**
   * 预览主题（临时应用，不保存）
   */
  previewTheme(themeId) {
    if (!themes[themeId]) return;

    const theme = themes[themeId];
    const root = document.documentElement || document.body;

    if (root && root.style) {
      Object.entries(theme.colors).forEach(([key, value]) => {
        const cssVarName = `--theme-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
        root.style.setProperty(cssVarName, value);
      });
      root.setAttribute('data-theme', theme.id);
    }
  }

  /**
   * 取消预览，恢复当前主题
   */
  cancelPreview() {
    this.applyTheme();
  }
}

// 创建全局主题管理器实例
const themeManager = new ThemeManager();

// 导出
export { themeManager, themes };
export default themeManager;
